package com.atguigu.gmall.product.controller;

import com.atguigu.gmall.common.result.Result;
import feign.Client;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.io.FilenameUtils;
import org.csource.common.MyException;
import org.csource.fastdfs.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.ClassUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

/**
 * @Auther 赵乾坤
 * @Date 2020-12-21 19:20
 */
@Api(tags = "图片上传")
@RestController
@RequestMapping("admin/product")
public class FileController {

    @Value("${img.url}")
    private String imgUrl;

    //上传图片
    @ApiOperation(value = "上传图片")
    @PostMapping("fileUpload")
    //public Result fileUpload(@RequestParam MultipartFile[] file){批量上传
    public Result fileUpload(MultipartFile file) {
        System.out.println(file.getOriginalFilename());//原始名称
        System.out.println(file.getSize());
        System.out.println(file.getName());
        //同学作业  封闭下面这些代码
        String path = ClassUtils.getDefaultClassLoader().
                getResource("fdfs_client.conf").getPath();

        try {
            ClientGlobal.init(path);//全局加载告诉它在哪;
            TrackerClient trackerClient = new TrackerClient();
            //连接Tracker
            TrackerServer trackerServer = trackerClient.getConnection();
            StorageServer storageServer = null;//第二个地址 没有
            //连接上了存储节点          1代表升级版
            StorageClient1 storageClient1 = new StorageClient1(trackerServer,storageServer);
            //①地址，②另外一个为服务地址

            //文件的扩展名
            String ext = FilenameUtils.getExtension(file.getOriginalFilename());
            //上传图片 1代表升级版
            String p = storageClient1.upload_file1(
                    file.getBytes(),
                    ext, null
            );//  第一个属性传二进制 第二个属性叫扩展名 ，第三个叫一些详细的meta信息其实就是接受吹嘘
//这个路径就是蓝箭头
            //    group1/M00/00/00/wKjIgl_gG4SAKtDeAAT8_AoEzOU590.jpg
            System.out.println(p);
            return Result.ok(imgUrl + p);//硬编码问题
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

}
